package br.com.syswill.boaviagem;

import java.text.SimpleDateFormat;
import java.util.Calendar;

import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.DatePickerDialog.OnDateSetListener;
import android.app.Dialog;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.RadioGroup;
import android.widget.Toast;
import br.com.syswill.boaviagem.dao.ViagemDAO;
import br.com.syswill.boaviagem.domain.Viagem;
import br.com.syswill.boaviagem.util.Constantes;

public class ViagemActivity extends Activity {

	private ViagemDAO viagemDAO;
	private int ano, mes, dia;
	private Button dataChegada;
	private Button dataSaida;
	private Calendar dtChegadaCalendar;
	private Calendar dtSaidaCalendar;
	private EditText destino, quantidadePessoas, orcamento;
	private RadioGroup radioGroup;
	private long id;
	

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.nova_viagem);

		Calendar calendar = Calendar.getInstance();
		ano = calendar.get(Calendar.YEAR);
		mes = calendar.get(Calendar.MONTH);
		dia = calendar.get(Calendar.DAY_OF_MONTH);
		dataChegada = (Button) findViewById(R.id.dataChegada);
		dataChegada.setText(dia + "/" + (mes + 1) + "/" + ano);
		dtChegadaCalendar = Calendar.getInstance();
		dtChegadaCalendar.set(ano, mes, dia);

		dataSaida = (Button) findViewById(R.id.dataSaida);
		dataSaida.setText((dia+10) + "/" + (mes + 1) + "/" + ano);
		dtSaidaCalendar = Calendar.getInstance();
		dtSaidaCalendar.set(ano, mes, (dia+10));

		// recuperando novas views
		destino = (EditText) findViewById(R.id.destino);
		quantidadePessoas = (EditText) findViewById(R.id.quantidadePessoas);
		orcamento = (EditText) findViewById(R.id.orcamento);
		radioGroup = (RadioGroup) findViewById(R.id.tipoViagem);

		viagemDAO = new ViagemDAO(this);

		id = getIntent().getLongExtra(Constantes.VIAGEM_ID, -1);
		if (id != -1) {
			prepararEdicao();
		}

	}

	public void selecionarData(View view) {
		showDialog(view.getId());
	}

	@Override
	protected Dialog onCreateDialog(int id) {
		if (R.id.dataChegada == id) {
			return new DatePickerDialog(this, listenerChegada, ano, mes, dia);
		}
		if (R.id.dataSaida == id) {
			return new DatePickerDialog(this, listenerSaida, ano, mes, dia);
		}

		return null;
	}

	private OnDateSetListener listenerChegada = new OnDateSetListener() {
		@Override
		public void onDateSet(DatePicker view, int year, int monthOfYear,
				int dayOfMonth) {
			ano = year;
			mes = monthOfYear;
			dia = dayOfMonth;
			dataChegada.setText(dia + "/" + (mes + 1) + "/" + ano);
			dtChegadaCalendar.set(ano, mes, dia);
		}
	};

	private OnDateSetListener listenerSaida = new OnDateSetListener() {
		@Override
		public void onDateSet(DatePicker view, int year, int monthOfYear,
				int dayOfMonth) {
			ano = year;
			mes = monthOfYear;
			dia = dayOfMonth;
			dataSaida.setText(dia + "/" + (mes + 1) + "/" + ano);
			dtSaidaCalendar.set(ano, mes, dia);
		}
	};

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		MenuInflater inflater = getMenuInflater();
		inflater.inflate(R.menu.viagem_menu, menu);
		return true;
	}

	@Override
	public boolean onMenuItemSelected(int featureId, MenuItem item) {

		switch (item.getItemId()) {
		case R.id.novo_gasto:
			startActivity(new Intent(this, GastoActivity.class));
			return true;
		case R.id.remover:
			// remover viagem do banco de dados
			return true;
		default:
			return super.onMenuItemSelected(featureId, item);
		}
	}

	public void salvarViagem(View view) {
		
		Viagem viagem = new Viagem();
		viagem.setDestino(destino.getText().toString());
		viagem.setDataChegada(dtChegadaCalendar.getTime());
		viagem.setDataSaida(dtSaidaCalendar.getTime());
		viagem.setOrcamento(new Double(orcamento.getText().toString()));
		viagem.setQuantidadePessoas(new Integer(quantidadePessoas.getText().toString()));
		
		int tipo = radioGroup.getCheckedRadioButtonId();
		if (tipo == R.id.lazer) {
			viagem.setTipoViagem(Constantes.VIAGEM_LAZER);
		} else {
			viagem.setTipoViagem(Constantes.VIAGEM_NEGOCIOS);
		}
		long resultado;

		if (id == -1) {
			resultado = viagemDAO.inserir(viagem);
		} else {
			viagem.setId(id);
			resultado = viagemDAO.atualizar(viagem);
		}
		if (resultado != -1) {
			Toast.makeText(this, getString(R.string.registro_salvo),
					Toast.LENGTH_SHORT).show();
			startActivity(new Intent(this, ViagemListActivity.class));
		} else {
			Toast.makeText(this, getString(R.string.erro_salvar),
					Toast.LENGTH_SHORT).show();
		}
	}

	@Override
	protected void onDestroy() {
		viagemDAO.close();
		super.onDestroy();
	}

	private void prepararEdicao() {

		Viagem viagem = viagemDAO.buscarViagemPorId(new Long(id));
		
		
		SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
		if (viagem.getTipoViagem() == Constantes.VIAGEM_LAZER) {
			radioGroup.check(R.id.lazer);
		} else {
			radioGroup.check(R.id.negocios);
		}
		destino.setText(viagem.getDestino());
		dtChegadaCalendar.setTime(viagem.getDataChegada());
		dtSaidaCalendar.setTime(viagem.getDataSaida());
		dataChegada.setText(dateFormat.format(dtChegadaCalendar.getTime()));
		dataSaida.setText(dateFormat.format(dtSaidaCalendar.getTime()));
		quantidadePessoas.setText(viagem.getQuantidadePessoas().toString());
		orcamento.setText(viagem.getOrcamento().toString());
		
	}

}
